package cn.le.studyEnum;

import java.util.EnumMap;
import java.util.Map;

import static cn.le.studyEnum.AlarmPoints.*;
/**
 * EnumMap是一种特殊的Map，它要求其中的键必须来自一个enum，由于enum本身的限制，所有EnumMap在
 * 内部可由数组实现，因此EnumMap的速度很快，我们可以放心地使用enum实例在EnumMap中进行操作，
 * 不过，我们只能将enum的实例作为键来调用put()方法，其他操作与使用一般的map差不多。
 *
 * EnumMap与EnumSet一样，enum实例定义时的此行决定了其在EnumMap中的顺序
 *
 */
public class EnumMaps {

    public static void main(String[] args) {

        EnumMap<AlarmPoints,Command> em = new EnumMap<AlarmPoints,Command>(AlarmPoints.class);
        em.put(KITCHEN, new Command() {
            @Override
            public void action() {
                System.out.println("Kitchen fire!");
            }
        });
        em.put(BATHROOM, new Command() {
            @Override
            public void action() {
                System.out.println("Bathroom alert!");
            }
        });
        for (Map.Entry<AlarmPoints,Command> e: em.entrySet()) {
            System.out.println(e.getKey()+":");
            e.getValue().action();
        }
        //没有设置key返回为null
        em.get(UTILITY).action();
    }
}

interface Command{
    void action();
}